//
//  CZPlaceholderTextView.swift
//  iOSWeibo10
//
//  Created by itcast on 16/5/21.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

/// 带占位文本的textView
class CZPlaceholderTextView: UITextView {
    
    // MARK: - 属性
    /// 占位文本
    var placeholder: String? {
        didSet {
            // 别人设置文字.将文字设置给label
            placeholderLabel.text = placeholder
        }
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override init(frame: CGRect, textContainer: NSTextContainer?) {
        super.init(frame: frame, textContainer: textContainer)
        
        prepareUI()
        
        // 设置代理来监听textView文字的改变
        // 在内部设置代理很危险,因为外面别人可能也会设置代理
        // 当里面设置代理,外面也设置代理, 后面赋值的会把前面赋的值改变了
//        self.delegate = self
        // 通知,不会被覆盖,通知一对多,一人发送通知多人监听,不会发生覆盖
        // observer: 通知的监听者
        // selector: 接收到通知后调用的方法
        // name: 通知名称
        // object: 通知的发送者, nil: 所有人发出的UITextViewTextDidChangeNotification我们都能监听到, self: self发出的通知才能监听到
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "textDidChange", name: UITextViewTextDidChangeNotification, object: self)
    }
    
    deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }
    
    func textDidChange() {
        // 使用通知监听到了textView文字的改变
        CZPrint(items: "使用通知监听到了textView文字的改变")
        placeholderLabel.hidden = self.hasText()
    }
    
    private func prepareUI() {
        // 1.添加控件
        self.addSubview(placeholderLabel)
        
        // 2.添加约束
        placeholderLabel.snp_makeConstraints { (make) -> Void in
            make.leading.equalTo(self).offset(5)
            make.top.equalTo(self).offset(8)
        }
    }

    // MARK: - 懒加载
    /// 占位label, 不要直接暴露lable给别人,防止别人做其他的操作
    private lazy var placeholderLabel: UILabel = {
        let label = UILabel()
        
        // 设置
        label.font = UIFont.systemFontOfSize(ComposeTextFontSize)
        label.textColor = UIColor.lightGrayColor()
        
        return label
    }()
}

/// 遵守代理协议
extension CZPlaceholderTextView: UITextViewDelegate {
    // 文字改变会调用
    func textViewDidChange(textView: UITextView) {
        // 有文字隐藏label
        placeholderLabel.hidden = textView.hasText()
    }
}